package org.csu.softwaremetrics_demo.entity.result.impl;

import org.csu.softwaremetrics_demo.entity.common.CKMetricSingleClass;
import org.csu.softwaremetrics_demo.entity.result.Result;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description: CK度量结果类，用于存储和操作所有类的CKMetricSingleClass对象。
 * @Author: Jukomu
 * @Package: org.csu.softwaremetrics_demo.entity.result
 * @Project: SoftwareMetrics_demo
 * @name: CKMetricResult
 * @Date: 2025/4/6-20:15
 * @Filename: CKMetricResult
 */
public class CKMetricResult implements Result<CKMetricSingleClass> {
    // 存储CKMetricSingleClass对象的映射，键为文件名，值为CKMetricSingleClass对象
    private final Map<String, CKMetricSingleClass> results;

    // 构造函数，初始化results为空HashMap
    public CKMetricResult() {
        this.results = new HashMap<>();
    }

    // 构造函数，接收一个Map并赋值给results
    public CKMetricResult(Map<String, CKMetricSingleClass> results) {
        this.results = results;
    }

    // 实现Result接口的add方法，将CKMetricSingleClass对象添加到results中
    @Override
    public void add(CKMetricSingleClass obj) {
        results.put(obj.getFile(), obj);
    }

    // 实现Result接口的get方法，根据文件名获取对应的CKMetricSingleClass对象
    @Override
    public CKMetricSingleClass get(String name) {
        return results.get(name);
    }

    // 实现Result接口的all方法，返回results中所有CKMetricSingleClass对象的集合
    @Override
    public Collection<CKMetricSingleClass> all() {
        return results.values();
    }

    // 实现Result接口的getByClassName方法，根据类名查找并返回对应的CKMetricSingleClass对象
    @Override
    public CKMetricSingleClass getByClassName(String name) {
        for (CKMetricSingleClass singleMetric : results.values()) {
            if (singleMetric.getClassName().equals(name)) {
                return singleMetric;
            }
        }
        return null;
    }

    /**
     * 批量添加度量结果
     * @param metrics 要添加的度量结果列表
     */
    public void setMetrics(Collection<CKMetricSingleClass> metrics) {
        if (metrics == null) {
            return;
        }
        metrics.forEach(this::add);
    }
}
